package com.java.netty.nio.netty.inboundhandlerandoutboundhandler;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

/**
 * @Author: Dgg
 * @Date: 2022/1/23 17:36
 */
public class MyByteToLongDecoder extends ByteToMessageDecoder {
	/**
	 * decoder 会根据接收到的数据 被调用多次 ，直到 确定没有新的元素添加到list
	 * ，或者是bytebuf 没有更多的可读字节为止
	 * 如果list 不为空 就会将list 的内容传递给下一个channelinboundhandler 处理，该处理器的方法也会被调用多次
	 *
	 * @param channelHandlerContext 上下文
	 * @param byteBuf               入站数据
	 * @param list                  list集合 将解码后的数据 传递给下一个handler
	 * @throws Exception
	 */
	@Override
	protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
		//因为long 是八个字节,需要判断有八个字节才可以读取
		System.out.println("MyByteToLongDecoder 被调用");
		if (byteBuf.readableBytes() >= 8) {
			list.add(byteBuf.readLong());
		} else {

		}
	}
}
